<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" dir="ltr" class="client-nojs">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>std::char_traits - cppreference.com</title>
<meta charset="UTF-8">
<meta name="generator" content="MediaWiki 1.21.2">


<link rel="shortcut icon" href="../../../favicon.ico">



<link rel="stylesheet" href="../../../common/ext.css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" href="../../../common/site_modules.css">
<style>a:lang(ar),a:lang(ckb),a:lang(fa),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}#toc{display:none}.editsection{display:none}
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-css:7:472787eddcf4605d11de8c7ef047234f */</style>

<script src="../../../common/startup_scripts.js"></script>
<script>if(window.mw){
mw.config.set({"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"cpp/string/char_traits","wgTitle":"cpp/string/char traits","wgCurRevisionId":69962,"wgArticleId":2238,"wgIsArticle":true,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Todo with reason"],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgRelevantPageName":"cpp/string/char_traits","wgRestrictionEdit":[],"wgRestrictionMove":[]});
}</script><script>if(window.mw){
mw.loader.implement("user.options",function(){mw.user.options.set({"ccmeonemails":0,"cols":80,"date":"default","diffonly":0,"disablemail":0,"disablesuggest":0,"editfont":"default","editondblclick":0,"editsection":0,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":0,"extendwatchlist":0,"externaldiff":0,"externaleditor":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"imagesize":2,"justify":0,"math":1,"minordefault":0,"newpageshidepatrolled":0,"nocache":0,"noconvertlink":0,"norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"quickbar":5,"rcdays":7,"rclimit":50,"rememberpassword":0,"rows":25,"searchlimit":20,"showhiddencats":0,"showjumplinks":1,"shownumberswatching":1,"showtoc":0,"showtoolbar":1,"skin":"cppreference2","stubthreshold":0,"thumbsize":2,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":0,"watchdefault":0,"watchdeletion":0,
"watchlistdays":3,"watchlisthideanons":0,"watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"wllimit":250,"variant":"en","language":"en","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false,"gadget-ColiruCompiler":1});;},{},{});mw.loader.implement("user.tokens",function(){mw.user.tokens.set({"editToken":"+\\","patrolToken":false,"watchToken":false});;},{},{});
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-js:7:ca03345b1e2c4d90a25d968753a73b92 */
}</script>
<script>if(window.mw){
mw.loader.load(["mediawiki.page.startup","mediawiki.legacy.wikibits","mediawiki.legacy.ajax"]);
}</script>
<style type="text/css">/*<![CDATA[*/
.source-cpp {line-height: normal;}
.source-cpp li, .source-cpp pre {
	line-height: normal; border: 0px none white;
}
/**
 * GeSHi Dynamically Generated Stylesheet
 * --------------------------------------
 * Dynamically generated stylesheet for cpp
 * CSS class: source-cpp, CSS id: 
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 * --------------------------------------
 */
.cpp.source-cpp .de1, .cpp.source-cpp .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.cpp.source-cpp  {font-family:monospace;}
.cpp.source-cpp .imp {font-weight: bold; color: red;}
.cpp.source-cpp li, .cpp.source-cpp .li1 {font-weight: normal; vertical-align:top;}
.cpp.source-cpp .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.cpp.source-cpp .li2 {font-weight: bold; vertical-align:top;}
.cpp.source-cpp .kw1 {color: #0000dd;}
.cpp.source-cpp .kw2 {color: #0000ff;}
.cpp.source-cpp .kw3 {color: #0000dd;}
.cpp.source-cpp .kw4 {color: #0000ff;}
.cpp.source-cpp .co1 {color: #909090;}
.cpp.source-cpp .co2 {color: #339900;}
.cpp.source-cpp .coMULTI {color: #ff0000; font-style: italic;}
.cpp.source-cpp .es0 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es1 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es2 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es3 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es4 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es5 {color: #008000; font-weight: bold;}
.cpp.source-cpp .br0 {color: #008000;}
.cpp.source-cpp .sy0 {color: #008000;}
.cpp.source-cpp .sy1 {color: #000080;}
.cpp.source-cpp .sy2 {color: #000040;}
.cpp.source-cpp .sy3 {color: #000040;}
.cpp.source-cpp .sy4 {color: #008080;}
.cpp.source-cpp .st0 {color: #008000;}
.cpp.source-cpp .nu0 {color: #000080;}
.cpp.source-cpp .nu6 {color: #000080;}
.cpp.source-cpp .nu8 {color: #000080;}
.cpp.source-cpp .nu12 {color: #000080;}
.cpp.source-cpp .nu16 {color:#000080;}
.cpp.source-cpp .nu17 {color:#000080;}
.cpp.source-cpp .nu18 {color:#000080;}
.cpp.source-cpp .nu19 {color:#000080;}
.cpp.source-cpp .ln-xtra, .cpp.source-cpp li.ln-xtra, .cpp.source-cpp div.ln-xtra {background-color: #ffc;}
.cpp.source-cpp span.xtra { display:block; }

/*]]>*/
</style>
<style type="text/css">/*<![CDATA[*/
.source-text {line-height: normal;}
.source-text li, .source-text pre {
	line-height: normal; border: 0px none white;
}
/**
 * GeSHi Dynamically Generated Stylesheet
 * --------------------------------------
 * Dynamically generated stylesheet for text
 * CSS class: source-text, CSS id: 
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 * --------------------------------------
 */
.text.source-text .de1, .text.source-text .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.text.source-text  {font-family:monospace;}
.text.source-text .imp {font-weight: bold; color: red;}
.text.source-text li, .text.source-text .li1 {font-weight: normal; vertical-align:top;}
.text.source-text .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.text.source-text .li2 {font-weight: bold; vertical-align:top;}
.text.source-text .ln-xtra, .text.source-text li.ln-xtra, .text.source-text div.ln-xtra {background-color: #ffc;}
.text.source-text span.xtra { display:block; }

/*]]>*/
</style>
<!--[if lt IE 7]><style type="text/css">body{behavior:url("/mwiki/skins/cppreference2/csshover.min.htc")}</style><![endif]-->
</head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_string_char_traits skin-cppreference2 action-view cpp-navbar">
        <!-- header -->
        
        <!-- /header -->
        <!-- content -->
        <div id="cpp-content-base">
            <div id="content">
                <a id="top"></a>
                <div id="mw-js-message" style="display:none;"></div>
                                <!-- firstHeading -->
                <h1 id="firstHeading" class="firstHeading">
<span style="font-size:0.7em; line-height:130%">std::</span>char_traits</h1>
                <!-- /firstHeading -->
                <!-- bodyContent -->
                <div id="bodyContent">
                                        <!-- tagline -->
                    <div id="siteSub">From cppreference.com</div>
                    <!-- /tagline -->
                                        <!-- subtitle -->
                    <div id="contentSub"><span class="subpages">&lt; <a href="../../cpp.html" title="cpp">cpp</a>‎ | <a href="../string.html" title="cpp/string">string</a></span></div>
                    <!-- /subtitle -->
                                                            <!-- bodycontent -->
                    <div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr">
<div class="t-navbar" style="">
<div class="t-navbar-sep"> </div>
<div class="t-navbar-head">
<a href="../../cpp.html" title="cpp"> C++</a><div class="t-navbar-menu"><div>
<div><table class="t-nv-begin" cellpadding="0" style="line-height:1.1em;">
<tr class="t-nv"><td colspan="5"> <a href="../language.1.html" title="cpp/language"> Language</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../header.html" title="cpp/header"> Standard library headers</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../concept.html" title="cpp/concept"> Concepts</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../utility.html" title="cpp/utility"> Utilities library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../string.html" title="cpp/string"> Strings library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../container.html" title="cpp/container"> Containers library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../algorithm.html" title="cpp/algorithm"> Algorithms library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../iterator.html" title="cpp/iterator"> Iterators library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../numeric.html" title="cpp/numeric"> Numerics library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../io.html" title="cpp/io"> Input/output library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../locale.html" title="cpp/locale"> Localizations library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../regex.html" title="cpp/regex"> Regular expressions library</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../atomic.html" title="cpp/atomic"> Atomic operations library</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../thread.html" title="cpp/thread"> Thread support library</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span> </td></tr>
</table></div>
<div></div>
</div></div>
</div>
<div class="t-navbar-sep"> </div>
<div class="t-navbar-head">
<a href="../string.html" title="cpp/string"> Strings library</a><div class="t-navbar-menu"><div>
<div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv-h1"><td colspan="5"> Null-terminated strings</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="byte.html" title="cpp/string/byte"> Byte strings</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="multibyte.html" title="cpp/string/multibyte"> Multibyte strings</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="wide.html" title="cpp/string/wide"> Wide strings</a> </td></tr>
<tr class="t-nv-h1"><td colspan="5"> Classes</td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="basic_string.html" title="cpp/string/basic string"><span class="t-lines"><span>basic_string</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><strong class="selflink"><span class="t-lines"><span>char_traits</span></span></strong></div></div></td></tr>
</table></div>
<div></div>
</div></div>
</div>
<div class="t-navbar-sep"> </div>
<div class="t-navbar-head">
<strong class="selflink"><tt>std::char_traits</tt></strong><div class="t-navbar-menu"><div>
<div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv-h1"><td colspan="5"> Member functions</td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/assign.html" title="cpp/string/char traits/assign"><span class="t-lines"><span>char_traits::assign</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/cmp.html" title="cpp/string/char traits/cmp"><span class="t-lines"><span>char_traits::cmp</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/move.html" title="cpp/string/char traits/move"><span class="t-lines"><span>char_traits::move</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/copy.html" title="cpp/string/char traits/copy"><span class="t-lines"><span>char_traits::copy</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/compare.html" title="cpp/string/char traits/compare"><span class="t-lines"><span>char_traits::compare</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/length.html" title="cpp/string/char traits/length"><span class="t-lines"><span>char_traits::length</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/find.html" title="cpp/string/char traits/find"><span class="t-lines"><span>char_traits::find</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/to_char_type.html" title="cpp/string/char traits/to char type"><span class="t-lines"><span>char_traits::to_char_type</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/to_int_type.html" title="cpp/string/char traits/to int type"><span class="t-lines"><span>char_traits::to_int_type</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/eq_int_type.html" title="cpp/string/char traits/eq int type"><span class="t-lines"><span>char_traits::eq_int_type</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/eof.html" title="cpp/string/char traits/eof"><span class="t-lines"><span>char_traits::eof</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="char_traits/not_eof.html" title="cpp/string/char traits/not eof"><span class="t-lines"><span>char_traits::not_eof</span></span></a></div></div></td></tr>
</table></div>
<div></div>
</div></div>
</div>
<div class="t-navbar-sep"> </div>
</div>
<table class="t-dcl-begin"><tbody>
<tr class="t-dsc-header">
<td> <div>Defined in header <code><a href="../header/string.html" title="cpp/header/string">&lt;string&gt;</a></code>
 </div>
</td>
<td></td>
<td></td>
</tr>
<tr class="t-dcl-sep">
<td></td>
<td></td>
<td></td>
</tr>
<tr class="t-dcl">
<td class="t-dcl-nopad"> <div><span class="mw-geshi cpp source-cpp"><span class="kw1">template</span><span class="sy1">&lt;</span><br>
<p>    <span class="kw1">class</span> CharT <br>
</p>
<span class="sy1">&gt;</span> <span class="kw1">class</span> char_traits<span class="sy4">;</span></span></div>
</td>
<td class="t-dcl-nopad">  </td>
<td class="t-dcl-nopad">  </td>
</tr>
<tr class="t-dcl-sep">
<td></td>
<td></td>
<td></td>
</tr>
</tbody></table>
<p>The <code>char_traits</code> class is a traits class template that abstracts basic character and string operations for a given character type. The defined operation set is such that generic algorithms almost always can be implemented in terms of it. It is thus possible to use such algorithms with almost any possible character or string type, just by supplying customized <code>char_traits</code> class.
</p>
<p>The <code>char_traits</code> class template serves as a basis for explicit instantiations. The user can provide a specialization for any custom character types. Several specializations are defined for the standard character types. The values of the member typedefs are as follows.
</p>
<table class="wikitable">

<tr>
<th> Instantiation
</th>
<th> <code>char_type</code>
</th>
<th> <code>int_type</code>
</th>
<th> <code>off_type</code>
</th>
<th> <code>pos_type</code>
</th>
<th> <code>state_type</code>
</th>
</tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">char_traits<span class="sy1">&lt;</span><span class="kw4">char</span><span class="sy1">&gt;</span></span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char</span></span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">int</span></span></span>
</td>
<td> <span class="t-lc"><a href="../io/streamoff.html" title="cpp/io/streamoff">std::streamoff</a></span>
</td>
<td> <span class="t-lc"><a href="../io/fpos.html" title="cpp/io/fpos">std::streampos</a></span>
</td>
<td> <span class="t-lc"><a href="multibyte/mbstate_t.html" title="cpp/string/multibyte/mbstate t">std::mbstate_t</a></span>
</td>
</tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">char_traits<span class="sy1">&lt;</span><span class="kw4">wchar_t</span><span class="sy1">&gt;</span></span></span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">wchar_t</span></span></span>
</td>
<td> <span class="t-lc">std::wint_t</span>
</td>
<td> <span class="t-lc">std::wstreamoff</span>
</td>
<td> <span class="t-lc"><a href="../io/fpos.html" title="cpp/io/fpos">std::wstreampos</a></span>
</td>
<td> <span class="t-lc"><a href="multibyte/mbstate_t.html" title="cpp/string/multibyte/mbstate t">std::mbstate_t</a></span>
</td>
</tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">char_traits<span class="sy1">&lt;</span><span class="kw4">char16_t</span><span class="sy1">&gt;</span></span></span> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char16_t</span></span></span>
</td>
<td> <span class="t-lc"><a href="../types/integer.html" title="cpp/types/integer">std::int_least16_t</a></span>
</td>
<td> <span class="t-lc"><a href="../io/streamoff.html" title="cpp/io/streamoff">std::streamoff</a></span>
</td>
<td> <span class="t-lc"><a href="../io/fpos.html" title="cpp/io/fpos">std::u16streampos</a></span>
</td>
<td> <span class="t-lc"><a href="multibyte/mbstate_t.html" title="cpp/string/multibyte/mbstate t">std::mbstate_t</a></span>
</td>
</tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">char_traits<span class="sy1">&lt;</span><span class="kw4">char32_t</span><span class="sy1">&gt;</span></span></span> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char32_t</span></span></span>
</td>
<td> <span class="t-lc"><a href="../types/integer.html" title="cpp/types/integer">std::int_least32_t</a></span>
</td>
<td> <span class="t-lc"><a href="../io/streamoff.html" title="cpp/io/streamoff">std::streamoff</a></span>
</td>
<td> <span class="t-lc"><a href="../io/fpos.html" title="cpp/io/fpos">std::u32streampos</a></span>
</td>
<td> <span class="t-lc"><a href="multibyte/mbstate_t.html" title="cpp/string/multibyte/mbstate t">std::mbstate_t</a></span>
</td>
</tr>
</table>
<p>The <code>char_traits</code> class template fulfills all requirements of <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="cpp/concept/Traits (page does not exist)"><code>Traits</code></a> concept.
</p>
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style=""><tr>
<td class="mbox-empty-cell"></td>
<td class="mbox-text" style="">This section is incomplete<br>Reason: simplify the description, emphasize that char_traits can be user defined </td>
</tr></table>
<table id="toc" class="toc"><tr><td>
<div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="char_traits.html%23Member_types"><span class="tocnumber">1</span> <span class="toctext">Member types</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="char_traits.html%23Member_functions"><span class="tocnumber">2</span> <span class="toctext">Member functions</span></a></li>
<li class="toclevel-1 tocsection-3"><a href="char_traits.html%23Example"><span class="tocnumber">3</span> <span class="toctext">Example</span></a></li>
<li class="toclevel-1 tocsection-4"><a href="char_traits.html%23See_also"><span class="tocnumber">4</span> <span class="toctext">See also</span></a></li>
</ul>
</td></tr></table>
<h3>
<span class="editsection">[<a href="http%3A//en.cppreference.com/mwiki/index.php" title="Edit section: Member types">edit</a>]</span> <span class="mw-headline" id="Member_types">Member types</span>
</h3>
<table class="t-dsc-begin">

<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc-hitem">
<td>  Type
</td>
<td>  Definition
</td>
</tr>


<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <code>char_type</code>
</td>
<td>  <code>CharT</code>
</td>
</tr>


<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <code>int_type</code>
</td>
<td>  an integer type that can hold all values of <code>char_type</code> plus <code>EOF</code>
</td>
</tr>


<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <code>off_type</code>
</td>
<td>  <i>implementation-defined</i>
</td>
</tr>


<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <code>pos_type</code>
</td>
<td>  <i>implementation-defined</i>
</td>
</tr>


<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <code>state_type</code>
</td>
<td>  <i>implementation-defined</i>
</td>
</tr>

</table>
<h3>
<span class="editsection">[<a href="http%3A//en.cppreference.com/mwiki/index.php" title="Edit section: Member functions">edit</a>]</span> <span class="mw-headline" id="Member_functions">Member functions</span>
</h3>
<table class="t-dsc-begin">

<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <div class="t-dsc-member-div">
<div><a href="char_traits/assign.html" title="cpp/string/char traits/assign"> <span class="t-lines"><span>assign</span></span></a></div>
<div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div>
</div>
</td>
<td>   assigns a character <br> <span class="t-mark">(public static member function)</span> 
</td>
</tr>

<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <div class="t-dsc-member-div">
<div><a href="char_traits/cmp.html" title="cpp/string/char traits/cmp"> <span class="t-lines"><span>eq</span><span>lt</span></span></a></div>
<div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div>
</div>
</td>
<td>   compares two characters  <br> <span class="t-mark">(public static member function)</span> 
</td>
</tr>

<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <div class="t-dsc-member-div">
<div><a href="char_traits/move.html" title="cpp/string/char traits/move"> <span class="t-lines"><span>move</span></span></a></div>
<div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div>
</div>
</td>
<td>   moves one character sequence onto another <br> <span class="t-mark">(public static member function)</span> 
</td>
</tr>

<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <div class="t-dsc-member-div">
<div><a href="char_traits/copy.html" title="cpp/string/char traits/copy"> <span class="t-lines"><span>copy</span></span></a></div>
<div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div>
</div>
</td>
<td>   copies a character sequence <br> <span class="t-mark">(public static member function)</span> 
</td>
</tr>

<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <div class="t-dsc-member-div">
<div><a href="char_traits/compare.html" title="cpp/string/char traits/compare"> <span class="t-lines"><span>compare</span></span></a></div>
<div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div>
</div>
</td>
<td>   lexicographically compares two character sequences <br> <span class="t-mark">(public static member function)</span> 
</td>
</tr>

<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <div class="t-dsc-member-div">
<div><a href="char_traits/length.html" title="cpp/string/char traits/length"> <span class="t-lines"><span>length</span></span></a></div>
<div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div>
</div>
</td>
<td>   returns the length of a character sequence <br> <span class="t-mark">(public static member function)</span> 
</td>
</tr>

<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <div class="t-dsc-member-div">
<div><a href="char_traits/find.html" title="cpp/string/char traits/find"> <span class="t-lines"><span>find</span></span></a></div>
<div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div>
</div>
</td>
<td>   finds a character in a character sequence <br> <span class="t-mark">(public static member function)</span> 
</td>
</tr>

<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <div class="t-dsc-member-div">
<div><a href="char_traits/to_char_type.html" title="cpp/string/char traits/to char type"> <span class="t-lines"><span>to_char_type</span></span></a></div>
<div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div>
</div>
</td>
<td>   converts <code>int_type</code> to equivalent  <code>char_type</code> <br> <span class="t-mark">(public static member function)</span> 
</td>
</tr>

<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <div class="t-dsc-member-div">
<div><a href="char_traits/to_int_type.html" title="cpp/string/char traits/to int type"> <span class="t-lines"><span>to_int_type</span></span></a></div>
<div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div>
</div>
</td>
<td>   converts <code>char_type</code> to equivalent  <code>int_type</code> <br> <span class="t-mark">(public static member function)</span> 
</td>
</tr>

<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <div class="t-dsc-member-div">
<div><a href="char_traits/eq_int_type.html" title="cpp/string/char traits/eq int type"> <span class="t-lines"><span>eq_int_type</span></span></a></div>
<div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div>
</div>
</td>
<td>   compares two <code>int_type</code> values <br> <span class="t-mark">(public static member function)</span> 
</td>
</tr>

<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <div class="t-dsc-member-div">
<div><a href="char_traits/eof.html" title="cpp/string/char traits/eof"> <span class="t-lines"><span>eof</span></span></a></div>
<div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div>
</div>
</td>
<td>   returns an <i>eof</i> value <br> <span class="t-mark">(public static member function)</span> 
</td>
</tr>

<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <div class="t-dsc-member-div">
<div><a href="char_traits/not_eof.html" title="cpp/string/char traits/not eof"> <span class="t-lines"><span>not_eof</span></span></a></div>
<div><span class="t-lines"><span><span class="t-cmark">[static]</span></span></span></div>
</div>
</td>
<td>   checks whether a character is <i>eof</i> value <br> <span class="t-mark">(public static member function)</span> 
</td>
</tr>
</table>
<h3>
<span class="editsection">[<a href="http%3A//en.cppreference.com/mwiki/index.php" title="Edit section: Example">edit</a>]</span> <span class="mw-headline" id="Example">Example</span>
</h3>
<div class="t-example">
<p> User-defined character traits may be used to provide <a rel="nofollow" class="external text" href="http%3A//www.gotw.ca/gotw/029.htm">case-insensitive comparison</a>
 </p>
<div class="t-example-live-link"><div class="coliru-btn coliru-btn-run-init">Run this code</div></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="cpp source-cpp"><pre class="de1"><span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;cctype&gt;</span>
 
<span class="kw1">struct</span> ci_char_traits <span class="sy4">:</span> <span class="kw1">public</span> std<span class="sy4">::</span><span class="me2">char_traits</span><span class="sy1">&lt;</span><span class="kw4">char</span><span class="sy1">&gt;</span> <span class="br0">{</span>
    <span class="kw4">static</span> <span class="kw4">bool</span> eq<span class="br0">(</span><span class="kw4">char</span> c1, <span class="kw4">char</span> c2<span class="br0">)</span> <span class="br0">{</span>
         <span class="kw1">return</span> <a href="byte/toupper.html"><span class="kw941">std::<span class="me2">toupper</span></span></a><span class="br0">(</span>c1<span class="br0">)</span> <span class="sy1">==</span> <a href="byte/toupper.html"><span class="kw941">std::<span class="me2">toupper</span></span></a><span class="br0">(</span>c2<span class="br0">)</span><span class="sy4">;</span>
     <span class="br0">}</span>
    <span class="kw4">static</span> <span class="kw4">bool</span> lt<span class="br0">(</span><span class="kw4">char</span> c1, <span class="kw4">char</span> c2<span class="br0">)</span> <span class="br0">{</span>
         <span class="kw1">return</span> <a href="byte/toupper.html"><span class="kw941">std::<span class="me2">toupper</span></span></a><span class="br0">(</span>c1<span class="br0">)</span> <span class="sy1">&lt;</span>  <a href="byte/toupper.html"><span class="kw941">std::<span class="me2">toupper</span></span></a><span class="br0">(</span>c2<span class="br0">)</span><span class="sy4">;</span>
    <span class="br0">}</span>
    <span class="kw4">static</span> <span class="kw4">int</span> compare<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> s1, <span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> s2, size_t n<span class="br0">)</span> <span class="br0">{</span>
        <span class="kw1">while</span> <span class="br0">(</span> n<span class="sy2">--</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="nu0">0</span> <span class="br0">)</span> <span class="br0">{</span>
            <span class="kw1">if</span> <span class="br0">(</span> <a href="byte/toupper.html"><span class="kw941">std::<span class="me2">toupper</span></span></a><span class="br0">(</span><span class="sy2">*</span>s1<span class="br0">)</span> <span class="sy1">&lt;</span> <a href="byte/toupper.html"><span class="kw941">std::<span class="me2">toupper</span></span></a><span class="br0">(</span><span class="sy2">*</span>s2<span class="br0">)</span> <span class="br0">)</span> <span class="kw1">return</span> <span class="sy2">-</span><span class="nu0">1</span><span class="sy4">;</span>
            <span class="kw1">if</span> <span class="br0">(</span> <a href="byte/toupper.html"><span class="kw941">std::<span class="me2">toupper</span></span></a><span class="br0">(</span><span class="sy2">*</span>s1<span class="br0">)</span> <span class="sy1">&gt;</span> <a href="byte/toupper.html"><span class="kw941">std::<span class="me2">toupper</span></span></a><span class="br0">(</span><span class="sy2">*</span>s2<span class="br0">)</span> <span class="br0">)</span> <span class="kw1">return</span> <span class="nu0">1</span><span class="sy4">;</span>
            <span class="sy2">++</span>s1<span class="sy4">;</span> <span class="sy2">++</span>s2<span class="sy4">;</span>
        <span class="br0">}</span>
        <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
    <span class="br0">}</span>
    <span class="kw4">static</span> <span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> find<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> s, <span class="kw4">int</span> n, <span class="kw4">char</span> a<span class="br0">)</span> <span class="br0">{</span>
        <span class="kw4">auto</span> <span class="kw4">const</span> ua <span class="br0">(</span><a href="byte/toupper.html"><span class="kw941">std::<span class="me2">toupper</span></span></a><span class="br0">(</span>a<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
        <span class="kw1">while</span> <span class="br0">(</span> n<span class="sy2">--</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="nu0">0</span> <span class="br0">)</span> 
        <span class="br0">{</span>
            <span class="kw1">if</span> <span class="br0">(</span><a href="byte/toupper.html"><span class="kw941">std::<span class="me2">toupper</span></span></a><span class="br0">(</span><span class="sy2">*</span>s<span class="br0">)</span> <span class="sy1">==</span> ua<span class="br0">)</span>
                <span class="kw1">return</span> s<span class="sy4">;</span>
            s<span class="sy2">++</span><span class="sy4">;</span>
        <span class="br0">}</span>
        <span class="kw1">return</span> nullptr<span class="sy4">;</span>
    <span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
 
<span class="kw1">typedef</span> <a href="basic_string.html"><span class="kw1043">std::<span class="me2">basic_string</span></span></a><span class="sy1">&lt;</span><span class="kw4">char</span>, ci_char_traits<span class="sy1">&gt;</span> ci_string<span class="sy4">;</span>
 
<a href="../io/basic_ostream.html"><span class="kw1413">std::<span class="me2">ostream</span></span></a><span class="sy3">&amp;</span> operator<span class="sy1">&lt;&lt;</span><span class="br0">(</span><a href="../io/basic_ostream.html"><span class="kw1413">std::<span class="me2">ostream</span></span></a><span class="sy3">&amp;</span> os, <span class="kw4">const</span> ci_string<span class="sy3">&amp;</span> str<span class="br0">)</span> <span class="br0">{</span>
    <span class="kw1">return</span> os.<span class="me1">write</span><span class="br0">(</span>str.<span class="me1">data</span><span class="br0">(</span><span class="br0">)</span>, str.<span class="me1">size</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span>
 
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
    ci_string s1 <span class="sy1">=</span> <span class="st0">"Hello"</span><span class="sy4">;</span>
    ci_string s2 <span class="sy1">=</span> <span class="st0">"heLLo"</span><span class="sy4">;</span>
    <span class="kw1">if</span> <span class="br0">(</span>s1 <span class="sy1">==</span> s2<span class="br0">)</span>
        <a href="../io/basic_ostream.html"><span class="kw1438">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> s1 <span class="sy1">&lt;&lt;</span> <span class="st0">" and "</span> <span class="sy1">&lt;&lt;</span> s2 <span class="sy1">&lt;&lt;</span> <span class="st0">" are equal<span class="es1">\n</span>"</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div></div>
<p>Output:
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="text source-text"><pre class="de1">Hello and heLLo are equal</pre></div></div> 
</div>
<h3>
<span class="editsection">[<a href="http%3A//en.cppreference.com/mwiki/index.php" title="Edit section: See also">edit</a>]</span> <span class="mw-headline" id="See_also">See also</span>
</h3>
<table class="t-dsc-begin">

<tr class="t-dsc-sep">
<td colspan="2">
</td>
</tr>
<tr class="t-dsc">
<td>  <div class="t-dsc-member-div"><div><a href="basic_string.html" title="cpp/string/basic string"> <span class="t-lines"><span>basic_string</span></span></a></div></div>
</td>
<td>   stores and manipulates sequences of characters <br> <span class="t-mark">(class template)</span> 
</td>
</tr>
</table>

<!-- 
NewPP limit report
Preprocessor visited node count: 4268/1000000
Preprocessor generated node count: 11542/1000000
Post‐expand include size: 115343/2097152 bytes
Template argument size: 23708/2097152 bytes
Highest expansion depth: 20/40
Expensive parser function count: 0/100
-->

<!-- Saved in parser cache with key mwiki1-mwiki_en_:pcache:idhash:2238-0!*!0!!en!*!* and timestamp 20140503212527 -->
</div>                    <!-- /bodycontent -->
                                        <!-- printfooter -->
                    <div class="printfooter">
                    Retrieved from "<a href="http%3A//en.cppreference.com/mwiki/index.php">http://en.cppreference.com/mwiki/index.php?title=cpp/string/char_traits&amp;oldid=69962</a>"                    </div>
                    <!-- /printfooter -->
                                                            <!-- catlinks -->
                    <div id="catlinks" class="catlinks"><div id="mw-normal-catlinks" class="mw-normal-catlinks">
<a href="http%3A//en.cppreference.com/w/Special%3ACategories" title="Special:Categories">Category</a>: <ul><li><a href="http%3A//en.cppreference.com/w/Category%3ATodo_with_reason" title="Category:Todo with reason">Todo with reason</a></li></ul>
</div></div>                    <!-- /catlinks -->
                                                            <div class="visualClear"></div>
                    <!-- debughtml -->
                                        <!-- /debughtml -->
                </div>
                <!-- /bodyContent -->
            </div>
        </div>
        <!-- /content -->
        <!-- footer -->
        
        <!-- /footer -->
        <script>if(window.mw){
mw.loader.state({"site":"loading","user":"missing","user.groups":"ready"});
}</script>
<script src="../../../common/skin_scripts.js"></script>
<script>if(window.mw){
mw.loader.load(["mediawiki.action.view.postEdit","mediawiki.user","mediawiki.page.ready","mediawiki.searchSuggest","mediawiki.hidpi","ext.gadget.ColiruCompiler"], null, true);
}</script>
<script src="../../../common/site_scripts.js"></script>

<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2828341-1']);
_gaq.push(['_setDomainName', 'cppreference.com']);
_gaq.push(['_trackPageview']);
</script><!-- Served in 0.091 secs. -->
	</body>
<!-- Cached 20140503212725 -->
</html>
